package com.ushine.web.template.lock.facade.impl;

import com.ushine.web.component.exception.ServiceException;
import com.ushine.web.template.lock.service.ILockService;
import com.ushine.web.template.lock.facade.ILockServiceFacade;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * @Author: yls
 * @Date 2022/4/7 9:48
 * @Description: lock 测试
 * @Version 1.0
 **/
@Slf4j
@Service
public class LockServiceFacadeImpl implements ILockServiceFacade {

    @Resource
    private ILockService lockService;

    /**
     * 测试id
     */
    private Long id = 1507254454430396418L;


    /**
     * 功能描述:
     * 〈 synchronized 锁的是实例，单例模式下，同一个类的方法加了 synchronized ，这些方法都不能同时运行〉
     *
     * @param number 数字
     * @return : void
     * @throws ServiceException 服务端自定义异常
     * @author : yls
     * @date : 2022/4/19 20:44
     */
    @Override
    public synchronized void addByThread(Integer number) throws ServiceException {
        lockService.add(number);
    }

    /**
     * 功能描述:
     * 〈 synchronized 锁的是实例，单例模式下，同一个类的方法加了 synchronized ，这些方法都不能同时运行〉
     *
     * @param number 数字
     * @return : void
     * @throws ServiceException 服务端自定义异常
     * @author : yls
     * @date : 2022/4/19 20:44
     */
    @Override
    public synchronized void decreaseByThread(Integer number) throws ServiceException {
        lockService.decrease(number);
    }
}
